from base.base import Base
from selenium.webdriver.common.by import By
from time import sleep


class BrandPage(Base):
    # 【修正1】菜单容器定位（匹配考核系统实际class：el-menu）
    __menu_container = (By.CSS_SELECTOR, '.el-menu')  # 父容器：左侧菜单整体
    # 【修正2】商场管理菜单定位（父容器+文本，避免重复）
    __menu_mall = (By.XPATH, '//span[text()="商场管理"]')
    # 【修正3】品牌制造商子菜单定位（基于商场管理展开后）
    __menu_brand = (By.XPATH, '//span[text()="品牌制造商"]')

    # 添加按钮（CSS选择器：基于按钮文本和父容器，适配考核系统界面）
    __btn_add = (By.CSS_SELECTOR, '#app > div > div.main-container > section > div > div.filter-container > button:nth-child(4)')
    # 品牌名称输入框（CSS选择器：基于表单标签关联，避免索引依赖）
    # 定位“品牌商名称”输入框
    __input_brand_name = (By.XPATH, '//label[@for="name"]/following-sibling::div//input[@class="el-input__inner"]')
    # 品牌介绍输入框（XPath：基于输入框placeholder，适配动态表单）
    __input_brand_intro = (By.CSS_SELECTOR, '#app > div > div.main-container > section > div > div.el-dialog__wrapper > div > div.el-dialog__body > form > div:nth-child(2) > div > div > input')
    # 品牌底价输入框（CSS选择器：基于表单顺序，非绝对路径）
    __input_brand_price = (By.CSS_SELECTOR, '#app > div > div.main-container > section > div > div.el-dialog__wrapper > div > div.el-dialog__body > form > div:nth-child(4) > div > div > input')
    # 确认添加按钮（XPath：基于按钮文本和弹窗容器，避免全局重复）
    __btn_confirm_add = (By.CSS_SELECTOR, '#app > div > div.main-container > section > div > div.el-dialog__wrapper > div > div.el-dialog__footer > div > button.el-button.el-button--primary.el-button--mini')
    # 断言用：列表中第一个品牌名称（验证添加成功）
    __text_first_brand = (By.XPATH, '//table[@class="el-table__body"]/tbody/tr[1]/td[2]/div')

    # -------------------------- 2. 页面业务方法（封装完整添加流程） --------------------------
    def add_brand(self, brand_name: str, brand_intro: str, brand_price: str):
        """
        完整业务流程：商场管理-品牌制造商-添加
        :param brand_name: 品牌名称
        :param brand_intro: 品牌介绍
        :param brand_price: 品牌底价（字符串格式，如"99.9"）
        """
        # 步骤1：等待菜单容器加载（确保页面就绪，调用基类显示等待方法）
        self.loc_wait_ele(self.__menu_container)
        sleep(1)

        # 步骤2：点击商场管理主菜单（展开子菜单）
        self.loc_wait_ele(self.__menu_mall).click()
        self.logger.info("点击【商场管理】主菜单，展开子菜单")
        sleep(1)  # 等待子菜单渲染（避免动态加载延迟）

        # 步骤3：点击品牌制造商子菜单（进入目标页面）
        self.loc_wait_ele(self.__menu_brand).click()
        self.logger.info("点击【品牌制造商】子菜单，进入品牌管理页面")
        sleep(1)

        # 步骤4：点击【添加】按钮（打开添加弹窗）
        self.loc_wait_ele(self.__btn_add).click()
        self.logger.info("点击【添加】按钮，打开品牌添加弹窗")
        sleep(3)

        # 步骤5：输入品牌信息（调用基类定位方法，确保输入有效）
        # 输入品牌名称
        self.loc_wait_ele(self.__input_brand_name).send_keys(brand_name)
        self.logger.info(f"输入品牌名称：{brand_name}")
        sleep(3)
        # 输入品牌介绍
        self.loc_wait_ele(self.__input_brand_intro).send_keys(brand_intro)
        self.logger.info(f"输入品牌介绍：{brand_intro}")
        sleep(3)
        # 输入品牌底价
        self.loc_wait_ele(self.__input_brand_price).send_keys(brand_price)
        self.logger.info(f"输入品牌底价：{brand_price}")
        sleep(3)

        # 步骤6：点击【确认】按钮（提交添加）
        self.loc_wait_ele(self.__btn_confirm_add).click()
        self.logger.info("点击【确认】按钮，提交品牌添加")
        sleep(3)  # 等待添加结果刷新（表格数据加载）

    # -------------------------- 3. 断言辅助方法（验证添加结果） --------------------------
    def get_first_brand_name(self) -> str:
        """
        获取品牌列表中第一个品牌的名称（用于断言添加成功）
        :return: 第一个品牌名称（字符串）
        """
        brand_name = self.loc_wait_ele(self.__text_first_brand).text
        self.logger.info(f"获取品牌列表第一个品牌名称：{brand_name}")
        return brand_name